#ifndef SPI_SOFT_H
#define SPI_SOFT_H

#include "main.h"

#define DELAY_TICKS 10

typedef uint8_t SPI_SOFT_U8;
typedef uint16_t SPI_SOFT_U16;

typedef void (*spi_soft_delay_func_t)(uint32_t ms);
typedef void (*spi_soft_sck_func_t)(SPI_SOFT_U8 sck);
typedef void (*spi_soft_mosi_func_t)(SPI_SOFT_U8 mosi);
typedef SPI_SOFT_U8 (*spi_soft_miso_func_t)(void);
typedef void (*spi_soft_ss_func_t)(SPI_SOFT_U8 ss);

typedef struct spi_soft_node
{
    spi_soft_delay_func_t delay_func;
    spi_soft_sck_func_t sck_func;
    spi_soft_mosi_func_t mosi_func;
    spi_soft_miso_func_t miso_func;
    spi_soft_ss_func_t ss_func;
    SPI_SOFT_U8 cpol_mode;
    SPI_SOFT_U8 cpha_mode;
}spi_soft_node_t;

SPI_SOFT_U8 spi_soft_init(spi_soft_node_t *node);

void spi_soft_ss_set(spi_soft_node_t *node, SPI_SOFT_U8 mode);

SPI_SOFT_U8 spi_soft_byte_CTRC(spi_soft_node_t *node, SPI_SOFT_U8 data);

#endif /* SPI_SOFT_H */